import http from '../API/index'
import app from '@system.app'
import network from '@system.network'
import prompt from '@system.prompt'
import device from '@system.device'

// $os_version:hook2global.$phoneInfo.os_version, // 操作系统版本
// device_brand:hook2global.$phoneInfo.device_brand,//设备品牌
// device_model:hook2global.$phoneInfo.device_model,// 设备型号
// device_type:hook2global.$phoneInfo.device_platform,// 操作系统
// openudid:hook2global.$phoneInfo.openudid,// 用户的设备ID
// imei:hook2global.$phoneInfo.imei,// 设备的imei
// resolution:hook2global.$phoneInfo.resolution,// 设备分辨率
// dpi:'750',// 设备的显示DPI
// app_name:'中青看点',// 应用名称
// $app_version:'',// 快应用版本号
// version_code:'',// APP市场版本号
// $network_type:'', // 网络环境 4g还是wifi
// $carrier:'',// 网络运营商
// $uid:'',// 用户uid
// app_channel:'',// 渠道号
// user_status:'',// 用户状态 0 正常 1 风险 2 封号
// exp_id:'',// 实验ID feed流中获取
// retrieve_id:'', // 召回来源ID feed流获取
// content_channel:'', // 内容频道 热文 推荐 要闻
// log_id:'',// 请求ID  feed流中获取
// request_time:'',// 请求时间
// current_module_sort:'',// 当前模块内容展现位置排序
// author:'',// 作者
// content_id:'',//内容ID
// content_title:'',//内容标题
// content_type:'',// 内容类型
// scene_id:'',// 内容来源
const hook2global = global.__proto__ || global
// https://www.kdocs.cn/p/99043623704 文档地址


/**
 * scene_id
 *
 * 首页feed                   home_feed
 * 视频feed                   video_feed
 * 搜索                         search
 * 文章详情页相关推荐    article_relevant_items
 * 视频详情页相关推荐    video_relevant_items
 * 阅读历史                   browsing_history
 * 置顶                       placed_top
 * 火爆转发                   fire_share
 * 应用内PUSH              inner_push
 * 应用外PUSH              outer_push
 *
 */
var myThis = null // 快应用的上下文环境
export default {
  articleReport: [], //已经上报的文章数据列表
  videoReport: [], //已经上报的视频数据列表
  articleList: [], // 当前上报的数据
  videoList: [],
  IMEI:'',
  type:'',// article 是 文章 video 是视频
  articleScrollHeight: 0, // 文章可滚动高度
  videoScrollHeight: 0, // 视频可滚动高度
  init(that) {
    myThis = that
    device.getInfo({
      success: (ret)=> {
        let obj = Object.assign(JSON.parse(JSON.stringify(hook2global.$commonData)),ret)
        // console.log('obj',obj)
        this.getNetwork()
        this.setData(obj)
      }
    })
  },
  // 赋值公共属性 初始化的时候调用
  setData(data){
    if(myThis&&myThis.$def){
      myThis.$def.pointParam =  {
        $os_version: data.vendorOsVersion && data.vendorOsVersion!=''?data.vendorOsVersion:data.osVersionName , // 操作系统版本
        device_brand: data.manufacturer.toUpperCase(), //设备品牌
        device_model: data.model.replace(/\s*/g,''), // 设备型号
        device_type: data.osType, // 操作系统
        openudid: data.openudid, // 用户的设备ID
        $device_id:data.device_id,
        resolution: data.screenWidth +'*'+data.screenHeight, // 设备分辨率
        dpi: data.screenDensity*160, // 设备的显示DPI
        app_name: 'youth_quick', // 应用名称
        $app_version: data.app_version, // 快应用版本号
        version_code: app.getInfo().versionCode, // APP市场版本号
        $network_type: '', // 网络环境 4g还是wifi
        $carrier:'',// 网络运营商
        $uid: data.uid, // 用户uid
        app_channel: data.channel // 渠道号
      }
    }
  },
  getNetwork() {
    if(myThis&&myThis.$def){
      network.getType({
        success: data => {
          myThis.$def.pointParam.$network_type = data.type
        }
      })
    }
  },
  // event:事件名 param: 所需的公共参数  extraParam: 额外的参数 根据不同事件 传递所需的参数
  submitPoint(event, param,extraParam) {
    // console.log('传入的数据',event,param)
    // 防止数据污染
    if(myThis&&myThis.$def){
      let newPointParam  = JSON.parse(JSON.stringify(myThis.$def.pointParam))
      let newParam=null
      Array.isArray(param)?newParam = param:newParam=[JSON.parse(JSON.stringify(param))]
      // param 是原来的数组对象
      let list = []
      newParam.map(item=> {
        this.handleExtradata(item)
        let data = {
          title: item.title?item.title: '',
          content_channel: myThis.$def.nowcatname ? myThis.$def.nowcatname : '推荐',
          request_time: new Date().getTime(),
          event_time:new Date().getTime(),
          current_module_sort: (item.current_module_sort || item.current_module_sort =='0')?item.current_module_sort: '',
          author:
          item.account && item.account.name
            ? item.account.name
            : item.account_name ,
          content_id: item.id?item.id: '',
          content_title: item.title?item.title : '',
          content_type:item.content_type?'文章':(this.type=='article' ? '文章' : '视频'),
          scene_id: item.scene_id?item.scene_id:'',
          exp_id:item.exp_id,
          log_id:item.log_id,
          retrieve_id:item.retrieve_id,
          strategy_id:item.strategy_id,
          imei:newPointParam.$device_id, // 设备的imei
          event: event,
          is_bi:true
        }
        let newData = Object.assign(data,newPointParam,extraParam?extraParam:{})
        list.push(newData)
        newData = ''
      })
      // console.log("输出的打点数据",list,event);
      // 请求接口
      this.pushPoint(list)
    }
  },
  submitPoint2(event, param,extraParam) {
    // console.log('传入的数据',event,param)
    // 防止数据污染
    if(myThis&&myThis.$def){
      let newPointParam  = JSON.parse(JSON.stringify(myThis.$def.pointParam))
      let newParam=null
      Array.isArray(param)?newParam = param:newParam=[JSON.parse(JSON.stringify(param))]
      // param 是原来的数组对象
      let list = []
      newParam.map(item=> {
        this.handleExtradata(item)
        let data = {
          request_time: new Date().getTime(),
          event_time:new Date().getTime(),
          imei:newPointParam.$device_id, // 设备的imei
          event: event,
          is_bi:true
        }
        let newData = Object.assign(data,newPointParam,extraParam?extraParam:{})
        list.push(newData)
        newData = ''
      })
      console.log('输出的打点数据',list,event);
      // 请求接口
      this.pushPoint(list)
    }
  },
  // 处理extra-data 各种情况
  handleExtradata(item){
    this.handleItem(item,'exp_id')
    this.handleItem(item,'log_id')
    this.handleItem(item,'retrieve_id')
    this.handleItem(item,'strategy_id')
  },
  handleItem(item,value){
    if(item[value] && item[value]!=''){
      // item[value] = value
    }else if(item.extra_data && item.extra_data[value]){
      item[value] = item.extra_data[value]
    }else{
      item[value] = ''
    }
  },
  pushPoint(data) {
    if(!data.length || data.length<=0) return 
    http.post('/FastApi/BiCensus/getData', {list:data,isBi:true})
    this.articleList = []
    this.videoList = []
  },
  // 内容展现上报
  contentShow(listID,itemID,list, _this) {
    if(list.length==0) return
    let newList = list.filter(ele => !ele.type_ad) // 过滤广告的事件曝光，构造内容数据
    // console.log('contentShow',list)
    if(listID.indexOf('article')!=-1){
      this.type = 'article'
      if(this.articleScrollHeight==0){
        if(_this.$element(listID)&&_this.$element(listID).getBoundingClientRect){
          _this.$element(listID).getBoundingClientRect({
            success: data => {
              this.articleScrollHeight = data.height
            },
            fail: (errorData, errorCode) => {
              console.log(`错误原因：${JSON.stringify(errorData)}, 错误代码：${errorCode}`)
            },
          })
        }
      }
    }else{
      this.type='video'
      if(this.videoScrollHeight==0){
        if(_this.$element(listID)&&_this.$element(listID).getBoundingClientRect){
          _this.$element(listID).getBoundingClientRect({
            success: data => {
              this.videoScrollHeight = data.height
            },
            fail: (errorData, errorCode) => {
              console.log(`错误原因：${JSON.stringify(errorData)}, 错误代码：${errorCode}`)
            },
          })
        }
      }
    }
    newList.map((item, index) => {
      this.type=='article'?this.showItemArticle(itemID,_this, item, index):this.showItemVideo(itemID,_this, item, index)
    })
    setTimeout(()=>{
      this.submitPoint('contentShow', this.type=='article'?this.articleList:this.videoList)
    },1000)
  },
  handleParam(item, index) {
    // console.log(item.video_play_url,'-------------')
    item.current_module_sort = index
    item.video_play_url && item.video_play_url!=''
      ? (item.scene_id = 'video_feed')
      : (item.scene_id = 'home_feed')
  },
  // 判断是否显示当前模块
  showItemArticle(itemID,that, item, index) {
    // console.log(itemID + index,that.$element( itemID + index),that.$element( itemID + index).getBoundingClientRect,'-------------------')
    if(that.$element( itemID + index)&&that.$element( itemID + index).getBoundingClientRect){
      that.$element( itemID + index).getBoundingClientRect({
        success: data => {
          // item的滚动距离小于父级的高度时 并且之前没有上报过
          if (
            data.top < this.articleScrollHeight &&
            !this.articleReport.includes(item)
          ) {
            this.articleReport.push(item)// 已经上报的数据
            this.handleParam(item, index)
            this.articleList.push(item) // 此次需要上报的数据
          }else{
            // console.log('重复上报的数据或者没出现的数据')
          }
        }
      })
    }
  },
  showItemVideo(itemID,that, item, index){
    if(that.$element( itemID + index)&&that.$element( itemID + index).getBoundingClientRect){
      that.$element( itemID + index).getBoundingClientRect({
        success: data => {
          // item的滚动距离小于父级的高度时 并且之前没有上报过
          if (
            data.top < this.videoScrollHeight &&
            !this.videoReport.includes(item)
          ) {
            this.videoReport.push(item)
            this.handleParam(item, index)
            this.videoList.push(item) // 此次需要上报的数据

          }else{
            // console.log('重复上报的数据或者没出现的数据')
          }
        }
      })
    }
  },
  someArray(arr,data){
    arr.some(item=>{
      if(item.id==data.id){
        return true 
      }else{
        return false
      } 
    })
  },

}
